﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Onshi.POS.AccesoDatos;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;

namespace Onshi.POS.Repositorios
{
    public class RepositorioArticuloAtributoDetalle : RepositorioEntidad<ArticuloAtributoDetalle, Int32>
    {
        #region Constructores

        public RepositorioArticuloAtributoDetalle()
            : base()
        {
            servicioDatosArticuloAtributoDetalle = new ServicioDatosArticuloAtributoDetalle();
        }

        #endregion

        #region Atributos

        private IServicioDatosArticuloAtributoDetalle servicioDatosArticuloAtributoDetalle;

        #endregion

        #region Propiedades

        private IServicioDatosArticuloAtributoDetalle ServicioDatosArticuloAtributoDetalle
        {
            get { return servicioDatosArticuloAtributoDetalle; }
        }

        public RepositorioArticulo RepositorioArticulo
        {
            get { return new RepositorioArticulo(); }
        }

        public RepositorioArticuloAtributo RepositorioArticuloAtributo
        {
            get { return new RepositorioArticuloAtributo(); }
        }
        #endregion

        #region Metodos

        protected override ArticuloAtributoDetalle FilaAEntidad(DataRow fila)
        {
            var articuloAtributoDetalle = new ArticuloAtributoDetalle();
            articuloAtributoDetalle.Id = (Int32)fila["IdArticuloAtributoMatriz"];
            articuloAtributoDetalle.Articulo = RepositorioArticulo.DevolverPorId((Int32)fila["IdArticulo"]);
            articuloAtributoDetalle.Atributo = RepositorioArticuloAtributo.DevolverPorId((Int32)fila["IdArticuloAtributo"]);
            articuloAtributoDetalle.Valor = fila["valor"].ToString();
            return articuloAtributoDetalle;
        }

        public override ArticuloAtributoDetalle DevolverPorId(Int32 id)
        {
            var entidad = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (entidades != null)
                using (var ds = servicioDatosArticuloAtributoDetalle.ArticulosAtributosDetalles_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        entidad = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(entidad);
                    }
            return entidad;
        }

        public void Insertar(ArticuloAtributoDetalle entidad)
        {
            entidad.Id = servicioDatosArticuloAtributoDetalle.ArticulosAtributosDetalles_Insertar(entidad.Articulo.Id, entidad.Atributo.Id, entidad.Valor);
        }

        public void Modificar(ArticuloAtributoDetalle entidad)
        {
            servicioDatosArticuloAtributoDetalle.ArticulosAtributosDetalles_Modificar(entidad.Id, entidad.Articulo.Id, entidad.Atributo.Id, entidad.Valor);
        }

        public void Eliminar(ArticuloAtributoDetalle entidad)
        {
            servicioDatosArticuloAtributoDetalle.ArticulosAtributosDetalles_Eliminar(entidad.Id);
            entidad = null;
        }

        public List<ArticuloAtributoDetalle> DevolverTodos()
        {
            using (var ds = servicioDatosArticuloAtributoDetalle.ArticulosAtributosDetalles_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        #endregion
    }
}